package com.company.project.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

/**
 * @Description 基本工具类
 * @author 米mi
 * @date 2017/08/21 16:43:18
 */
public class BaseTools {

    private static int suffix = 0; // 随机后缀

    /**
     * 获取自定义字符串（表主键）
     * 
     * @return 主键
     */
    public static synchronized String getPK(String format) {
        suffix = 0;
        suffix++;
        StringBuffer str = new StringBuffer();
        // 1.添加日期字符串
        String date = formatDate(new Date(), format);
        str.append(date);

        // 2.添加后缀（三位数）
        if (suffix > 999) {
            suffix = 0;
        }
        str.append(String.format("%03d", suffix));
        return str.toString();
    }

    /**
     * 日期格式转换（日期-字符串）
     * 
     * @param date
     *            日期
     * @param format
     *            日期格式
     * @return 日期字符串
     */
    public static String formatDate(Date date, String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(date);
    }

    /**
     * 日期格式转换（字符串-日期）
     * 
     * @param date
     *            日期字符串
     * @param format
     *            日期格式
     * @return Date 日期
     * @throws ParseException
     *             日期格式转换异常
     */
    public static Date formatString(String date, String format) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.parse(date);
    }

    /**
     * 获取系统当前日期
     * 
     * @return 系统当前日期
     */
    public static String getSystemDate() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd EEE HH:mm:ss");
        return sdf.format(new Date());
    }

    /**
     * date日期转timestamp时间戳
     * 
     * @param date
     *            日期
     * @return Timestamp 时间戳
     */
    public static Timestamp dateToTimestamp(Date date) {
        Timestamp ts = new Timestamp(date.getTime());
        return ts;
    }

    /**
     * 读取properties配置文件中的value值
     * 
     * @param file
     *            properties配置文件的路径
     * @param key
     *            properties配置文件中的key
     * @return properties配置文件中的value
     * @throws IOException
     *             抛出异常
     */
    public static String getPropertiesValue(String file, String key) throws IOException {
        Properties properties = new Properties();
        InputStream input = BaseTools.class.getResourceAsStream(file);

        // 读取文件
        properties.load(input);
        String result = properties.getProperty(key).trim();
        return result;
    }

    /**
     * 随机生产字母
     * 
     * @return 字母
     */
    public static String getChar() {
        char c = (char) (Math.random() * 26 + 97);
        return String.valueOf(c);
    }

    /**
     * 随机生成字符串
     * 
     * @param size
     *            字符串大小
     * @return 字符串
     */
    public static String getString(int size) {
        StringBuffer str = new StringBuffer();
        for (int i = 0; i < size; i++) {
            // 将随机生成的字母添加到str中
            str.append(getChar());
        }
        return str.toString();
    }

    /**
     * 随机生成汉字
     * 
     * @return 汉字
     */
    public static String getCharacters() {
        char c = (char) (0x4e00 + (Math.random() * (0x9fa5 - 0x4e00 + 1)));
        return String.valueOf(c);
    }

    /**
     * 随机生成汉字字符串 2017/08/21 18:33:01
     * 
     * @param size
     *            字符串大小
     * @return 汉字字符串
     */
    public static String getChinese(int size) {
        StringBuffer str = new StringBuffer();
        for (int i = 0; i < size; i++) {
            str.append(getCharacters());
        }
        return str.toString();
    }
}
